package educar.controllers;


import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import educar.gui.AdministradorView;
import educar.models.Docente;
import educar.models.Materia;
import educar.models.docenteNotFound;
import educar.models.materiaNotFound;
import educar.db.JPA;


public class MateriaController implements ActionListener {
  private AdministradorView view;
  String nombreMateria;
  String codigoMateria;
  String dniDocente;
  int dniEntero;
  int codigoEntero;
  private JPA jpa = new JPA();
	
  public MateriaController(AdministradorView view) {
    this.view=view;
  }
	
  public void actionPerformed(ActionEvent evento){
    nombreMateria = "";
	codigoMateria = "";
	dniDocente = "";
    nombreMateria = view.getNombreMateria();
    codigoMateria = view.getCodigoMateria();
    dniDocente = view.getDniDocenteACargo();
	if(evento.getActionCommand().equals("Cargar")){
	  try {
	    codigoEntero=Integer.parseInt(codigoMateria.trim());
	  } 
	  catch (Exception e) {
	    JOptionPane.showMessageDialog(null, "Codigo incorrecto");
		view.resetCamposMateria();}
		try {
		  dniEntero=Integer.parseInt(dniDocente.trim());
	    } 
		catch (Exception e) {
		  JOptionPane.showMessageDialog(null, "Dni incorrecto");
		  view.resetCamposMateria();}
		  if(nombreMateria.equals("")||codigoMateria.equals("")||(dniDocente.equals("")))
		    JOptionPane.showMessageDialog(null, "Error en el ingreso de datos");
		  else{
			try{
			  Docente.getDocenteByDNI(dniDocente);
			  Materia.getMateriaByCodigo(codigoMateria); 
			  JOptionPane.showMessageDialog(null, "Ya existe una materia con ese codigo");
			} 
			catch(docenteNotFound e) {
			  JOptionPane.showMessageDialog(null, "No existe docente con ese DNI");
			}
			catch(materiaNotFound e) {
			  Materia m = new Materia(codigoEntero,nombreMateria,dniEntero);
			  m.save();
			  view.resetCamposMateria();
			  JOptionPane.showMessageDialog(null, "Materia insertada con exito");
		    }
		  }
		 }
	 else {
	   if(evento.getActionCommand().equals("Eliminar")){
	     try {
		   codigoEntero=Integer.parseInt(codigoMateria.trim());
		 } 
	     catch (Exception e) {
		   JOptionPane.showMessageDialog(null, "Codigo incorrecto");
		   view.resetCamposMateria();}
		   try {
			 Materia.getMateriaByCodigo(codigoMateria);
			 Materia.destroy("materia","cod_materia",codigoMateria); 
			 view.resetCamposMateria();
			 JOptionPane.showMessageDialog(null,"Materia eliminada con exito");
		   }
		   catch(materiaNotFound e) {
		     JOptionPane.showMessageDialog(null,"No existe ninguna materia con ese codigo");
		   }
		}
		else {
		  if(evento.getActionCommand().equals("Modificar")){
		    try {
			  codigoEntero=Integer.parseInt(codigoMateria.trim());
			  Materia m = Materia.getMateriaByCodigo(codigoMateria);
			  view.setCamposMateria(Integer.toString(m.getCodigo()),m.getNombre(),Integer.toString(m.getDniResponsable()));
			  view.setBotonMateriaOK(true);
		    } 
		    catch(materiaNotFound e) {
				JOptionPane.showMessageDialog(null,"ERROR: codigo materia");
			}
		    catch (Exception e) {
				  JOptionPane.showMessageDialog(null, "Codigo incorrecto");
				  view.resetCamposMateria();
			}
		 }
		 else {
			if(evento.getActionCommand().equals("OK")){
			  if(nombreMateria.equals("")||(codigoMateria.equals(""))||(dniDocente.equals(""))){
				view.resetCamposMateria(); 
			   } 
			   else {
				 try {
				  Docente doc = Docente.getDocenteByDNI(dniDocente);
				  if(doc==null)
				    JOptionPane.showMessageDialog(null,"ERROR: docente no existe");
				  else {
					Materia m = Materia.getMateriaByCodigo(codigoMateria);
					m.modificar(dniDocente);
				    JOptionPane.showMessageDialog(null,"Materia modificada con exito");
				    view.resetCamposMateria();
				  }
				 } 
				 catch(materiaNotFound e) {
					JOptionPane.showMessageDialog(null,"ERROR: codigo materia");
			  	 } 
				 catch(docenteNotFound e) {
					JOptionPane.showMessageDialog(null,"ERROR: dni docente");
				}
		      }
			  view.setBotonMateriaOK(false);
		    }
	      }
	    }
     } 
  }
	
  public static String[] listarNombres() throws SQLException{ 
    ArrayList<String> res = Materia.getMateriasPorAlumno();
    String [] materias = new String[res.size()+1];
    materias[0] = "**MATERIAS**";
    for(int i =1; i<(res.size()+1); i++){
      materias[i]=res.get(i-1);
    }
    return materias;
  }

  public static String[] listarMaterias() throws SQLException{ //******
    ArrayList<String> res= Materia.getMaterias();
    String [] materias = new String[res.size()+1];
    materias[0] = "**MATERIAS**";
    for(int i =1; i<(res.size()+1); i++){
       materias[i]=res.get(i-1);
    }
    return materias;
 }
}



